package com.mrd.gtimpframe.service;


import com.mrd.base.Jqgrid;
import com.mrd.framework.config.web.json.Result;
import com.mrd.gtimpframe.entity.DeclaOperationRecord;
import com.mrd.gtimpframe.entity.OperationalEfficiency;

import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created by dengdc on 2017/11/17.
 */
public interface DeclaOperationRecordService {

    /**
     * 保存支付提交 操作记录
     *
     * @param payId 付款订单ID
     */
    void savePaymentRecord(String payId);

    /**
     * 保存客户申请驳回 操作记录
     */
    void saveCustomerApplyRejectRecord(String did);

    /**
     * 保存操作记录：供应商处理驳回申请
     *
     * @param did 报关单ID
     */
    void saveSupplierAcceptRejectRecord(String did);

    /**
     * 保存操作记录：供应商海关退单
     *
     * @param did 报关单ID
     */
    void saveSupplierChargeBackRecord(String did);

    /**
     * 保存操作记录：供应商受理报关单
     *
     * @param did 报关单ID
     */
    void saveSupplierDoValidRecord(String did);

    /**
     * 保存操作记录：线下供应商受理报关单
     *
     * @param did 报关单ID
     */
    void saveSecondSupplierDoValidRecord(String did);

    /**
     * 保存操作记录：供应商驳回报关单
     *
     * @param did 报关单ID
     */
    void saveSupplierDoRejectRecord(String did);

    /**
     * 保存操作记录：上传报关单得到广版单一窗口
     *
     * @param did 报关单ID
     */
    void saveSupplierDidGuangZhouSWUploadRecord(String did);

    /**
     * 保存操作记录：上传报关单得到国版单一窗口
     *
     * @param did 报关单ID
     */
    void saveSupplierCNSWUploadRecord(String did);

    /**
     * 保存操作记录：上传到QP小工具
     *
     * @param did 报关单ID
     */
    void saveSupplierQPUploadRecord(String did);

    /**
     * 保存操作记录：供应商更新查验记录
     *
     * @param params 更新查验是传入的参数
     */
    void saveSupplierUpdateVerifyRecord(Map params);

    /**
     * 获取表格数据
     */
    Page<Map> getGridData(Jqgrid jqgrid);

    /**
     * 报关单历史操作信息
     *
     * @param jqgrid 分页、排序、查询条件
     * @param did    报关单ID
     */
    Page hisOpRecGridData(Jqgrid jqgrid, String did);

    /**
     * 查看操作记录页面报关数据获取
     *
     * @param did 报关单ID
     */
    Map recDeclarationInfoFormData(String did);

    /**
     * 保存人工产生的记录
     * 单证操作记录：待申领，申领中，已申领，已发放； 限制：只有拥有上一个状态的记录，才允许有下一个状态的记录
     * 线下操作记录：包括现场放行，其他，保存现场放行前，检查是否包申报记录。
     *
     * @param record 操作记录
     */
    Result saveRecord(DeclaOperationRecord record);

    /**
     * 下载单证发放记录
     */
    void downloadDocHoRecord(HttpServletRequest request, HttpServletResponse response, Map<String, Object> params) throws Exception;

    /**
     * 查询业务操作效率
     */
    void getOperationalEfficiency(Jqgrid jqgrid, HttpServletResponse response);

    /**
     * 业务操作效率记录下载
     */
    void downloadOperationalEfficiency(String whereCase, HttpServletRequest request, HttpServletResponse response) throws Exception;

    /**
     * 业务操作量统计
     */
    void getOperationStatistics(Jqgrid jqgrid, HttpServletResponse response);

    /**
     * 业务操作量统计记录下载
     */
    void downloadOperationStatistics(String declarationType, String whereCase, HttpServletRequest request, HttpServletResponse response) throws Exception;

    /**
     * 查询报关单某一项操作项的登记数量
     * @param did 报关单ID
     * @param opItCode 操作项目
     */
    Integer countOperationRecord(String did, String opItCode);
}
